﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DocumentGenerator.Document;
using iTextSharp.text;
using System.IO;
using INES.ExperimentalSoftwareEngineeringModellingLanguageWorkbench.ESEML;

    class Program
    {
	    static void Main(string[] args)
        {
									
			try
            {
				DocumentESEML documento = new DocumentESEML(@"Caracterização do uso da ESEML para especificação de projetos de experimentos em engenharia de software .pdf");

				documento.Open();

				//criando capa
				documento.AddCover("PROJETO DE EXPERIMENTO", "Caracterização do uso da ESEML para especificação de projetos de experimentos em engenharia de software ");

				//Introdução
				Chapter introducao = documento.AddChapter("Introdução");
				documento.AddParagraph("Este experimento controlado será executado objetivando caracterizar o uso da linguagem de domínio ESEML para definir projetos de experimento em engenharia de software.", 12);

				//Objetivos
				Chapter objetivos = documento.AddChapter("Definicao dos Objetivos");
				documento.AddParagraph("As seções que seguem apresentam os objetivos desse estudo experimental.", 12);

				

                //Objetivos
                                                    Section objetivoSection = documento.AddSection(objetivos, "Objetivo Principal");
					documento.AddParagraph("Considerando a especificação de projetos de experimentos para engenharia de software, planejamos caracterizar as suas diferenças em relação a uma especificação que utilize a ESEML  e  que  utilize  um  processador  de  textos  (PT)  no  que  se  refere  ao tempo  de  especificação  do  projeto e a qualidade  da  especificação  do mesmo.",12);
					Section questionSection = documento.AddSubSection(objetivoSection, "Questões");
                    List list = new List(List.UNORDERED);
                    						documento.AddParagraph("O  tempo  utilizado  para  especificar  um  projeto  de  experimento,  bem  como  a  qualidade ", 12, 0, 5F);
																																                                    
				//Metricas
                documento.AddSection(objetivos, "Métricas");
                List metricaItens = new List(List.UNORDERED);
                					documento.AddParagraph("Tempo  necessário  para  especificar  um  projeto  de  experimento  em  unidades  de minutos. ", 12, 0, 5F);
                					documento.AddParagraph("Qualidade da especificação do projeto de experimento, avaliado por um especialista em  engenharia  de  software  experimental  e  outro  especialista  no  domínio  do experimento.  Cada  especialista  deverá  dar  uma  nota de  0  a  5  para  a  especificação  do plano  de  experimento  de  acordo  com  a  sua  competência.  Dessa  forma  a  nota  de qualidade  do  projeto  será  a  média  das  notas  do  especialista  em  experimento  e  do especialista de domínio. ", 12, 0, 5F);
                
				//Hipoteses
                Chapter planejamento = documento.AddChapter("Planejamento");
                documento.AddParagraph("Essa seção descreve o plano de experimento evidenciando como o mesmo foi projetado. Isso permite a execução de outros experimento utilizando o mesmo plano, o que poderia confirmar nossos resultados e derivar novos.", 12);

									documento.AddSection(planejamento, "Definição de hipóteses");
					documento.AddParagraph("Antes de apresentar as hipóteses desse projeto, é necessário introduzir alguns símbolos que serão utilizados no decorrer do projeto para denotar as variáveis dependentes que terão seus valores coletados e analisados.", 12);
					documento.AddNewLine();
					 
						documento.AddParagraph("TE: Tempo de especificação do projeto de experimento",12);
					 
						documento.AddParagraph("QE: Qualidade da especificação do experimento. ",12);
					
					Paragraph p;
					Chunk chunkNameHyp;
					Chunk chunkExpressionHyp;
					Chunk chunkDescriptionHyp;

					documento.AddSection(planejamento, "Hipóteses nulas");

																		p = new Paragraph("", new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.NORMAL));
							p.Alignment = Element.ALIGN_JUSTIFIED;
							p.SpacingBefore = 5;

							chunkNameHyp = new Chunk("H01: ", new Font(Font.FontFamily.TIMES_ROMAN, 12, 1));
							chunkExpressionHyp = new Chunk("TE1 = TE2 ", new Font(Font.FontFamily.TIMES_ROMAN, 12, 0));

							p.Add(chunkNameHyp);
							p.Add(chunkExpressionHyp);
							documento.AddParagraph(p);

							documento.AddParagraph("O tempo para especificar um projeto de experimento no contexto  da  engenharia  de  software  utilizando  a  ESEML  não  é  diferente  do  tempo necessário para realizar a mesma atividade utilizando um PT.  ", 12);	
																								p = new Paragraph("", new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.NORMAL));
							p.Alignment = Element.ALIGN_JUSTIFIED;
							p.SpacingBefore = 5;

							chunkNameHyp = new Chunk("H02: ", new Font(Font.FontFamily.TIMES_ROMAN, 12, 1));
							chunkExpressionHyp = new Chunk("QE1 = QE2 ", new Font(Font.FontFamily.TIMES_ROMAN, 12, 0));

							p.Add(chunkNameHyp);
							p.Add(chunkExpressionHyp);
							documento.AddParagraph(p);

							documento.AddParagraph("O tempoA qualidade para especificar um projeto de experimento no contexto  da  engenharia  de  software  utilizando  a  ESEML  não  é  diferente  do  tempo necessário para realizar a mesma atividade utilizando um PT.  ", 12);	
																																	
					documento.AddSection(planejamento, "Hipóteses alternativas");

																																								p = new Paragraph("", new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.NORMAL));
							p.Alignment = Element.ALIGN_JUSTIFIED;
							p.SpacingBefore = 5;

							chunkNameHyp = new Chunk("H11: ", new Font(Font.FontFamily.TIMES_ROMAN, 12, 1));
							chunkExpressionHyp = new Chunk("TE1 < TE2 ", new Font(Font.FontFamily.TIMES_ROMAN, 12, 0));

							p.Add(chunkNameHyp);
							p.Add(chunkExpressionHyp);
							documento.AddParagraph(p);

							documento.AddParagraph("O  tempo  para  especificar  um  projeto  de experimento no contexto da engenharia de software utilizando a ESEML é menor que o tempo  necessário  para  realizar  a  mesma  atividade  utilizando  um  PT. ", 12);	

																								p = new Paragraph("", new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.NORMAL));
							p.Alignment = Element.ALIGN_JUSTIFIED;
							p.SpacingBefore = 5;

							chunkNameHyp = new Chunk("H12: ", new Font(Font.FontFamily.TIMES_ROMAN, 12, 1));
							chunkExpressionHyp = new Chunk("QE1 > QE2 ", new Font(Font.FontFamily.TIMES_ROMAN, 12, 0));

							p.Add(chunkNameHyp);
							p.Add(chunkExpressionHyp);
							documento.AddParagraph(p);

							documento.AddParagraph("A qualidade  ao especificar  um  projeto  de experimento no contexto da engenharia de software utilizando a ESEML é maior que a qualidade necessária  para  realizar  a  mesma  atividade  utilizando  um  PT. ", 12);	

											

				
				//Tratamento
			    Section fatorSection = documento.AddSection(planejamento, "Tratamento");
                					documento.AddSubSection(fatorSection, "Ferramenta");
                                            documento.AddParagraph("Especificação do projeto de experimento utlizando ESEML.", 12);
					                        documento.AddParagraph("Especificação do projeto de experimento utlizando um processador de texto.", 12);
					                
				//Objeto Experimental
				
				//Participantes
				
				//Variaveis independentes
                Section variaveisIndependentes = documento.AddSection(planejamento, "Variáveis Independentes");
                documento.AddParagraph("Essa subção apresenta as variáveis que servirão de entrada para o experimento, sejam elas constantes, no caso dos parâmetros, ou apresentando múltiplos tratamentos, no caso dos fatores.", 12);
                 
                   //verificar modelagem das variaveis dependentes e independentes!
                 
                   //verificar modelagem das variaveis dependentes e independentes!
                

				//Parâmetros
				Paragraph pPar;
				Chunk chunkNamePar;
				Chunk chunkDescriptionPar;
                documento.AddSubSection(variaveisIndependentes, "Parâmetros");
                						pPar = new Paragraph("", new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.NORMAL));
						pPar.Alignment = Element.ALIGN_JUSTIFIED;
						pPar.SpacingBefore = 5;

						chunkNamePar = new Chunk("Projeto de experimento: ", new Font(Font.FontFamily.TIMES_ROMAN, 12, 1));
						chunkDescriptionPar = new Chunk("O projeto de experimento a ser especificado terá por objetivo caracterizar o método de implementação progressivo no contexto de software orientado a aspectos utilizando AspectJ.: ", new Font(Font.FontFamily.TIMES_ROMAN, 12, 0));

						pPar.Add(chunkNamePar);
						pPar.Add(chunkDescriptionPar);
						documento.AddParagraph(pPar);
                
				//Fatores
				Paragraph pFac;
				Chunk chunkNameFac;
				Chunk chunkDescriptionFac;
                documento.AddSubSection(variaveisIndependentes, "Fatores");
                						pFac = new Paragraph("", new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.NORMAL));
						pFac.Alignment = Element.ALIGN_JUSTIFIED;
						pFac.SpacingBefore = 5;

						chunkNamePar = new Chunk("Ferramenta: ", new Font(Font.FontFamily.TIMES_ROMAN, 12, 1));
						chunkDescriptionPar = new Chunk("Ferramenta  para  especificação  de  projeto  de  experimentos  em  engenharia  de : ", new Font(Font.FontFamily.TIMES_ROMAN, 12, 0));

						pFac.Add(chunkNamePar);
						pFac.Add(chunkDescriptionPar);
						documento.AddParagraph(pFac);
                
				

				Section variaveisDependentes = documento.AddSection(planejamento, "Variáveis Dependentes");
				documento.AddParagraph("Essa subseção apresenta as variáveis de saída do experimento, portanto aquelas que serão medidas e utilizadas para avaliar os tratamentos empregados como entrada.", 12);
				documento.AddNewLine();
				 
					documento.AddParagraph("Tempo de especificação do projeto de experimento", 12, 0, 5F);
				 
					documento.AddParagraph("Qualidade da especificação do experimento. ", 12, 0, 5F);
				
				Chapter validade = documento.AddChapter("Validade do Experimento");
                documento.AddParagraph("Essa seção discute o quão válidos são os resultados desse experimento, seu potencial de ser generalizado para um escopo mais amplo e como foram mitigadas as ameaças a validade do mesmo. São quatro os tipos de validade comumente utilizados: validade de conclusão, interna, de construção e externa.", 12);

                											documento.AddSection(validade, "Validade de Conclusão");
																									  documento.AddParagraph("A  validade  de  conclusão  diz  respeito  ao  relacionamento  entre  os  tratamentos  e  as variáveis dependentes, de maneira a se estabelecer um relacionamento  estatístico entre eles.  Para  garantir  tal  validade  os  resultados  do  experimento  deverão  ser  comparados com  uma  distribuição  student’s  t,  uma  vez  que  essa distribuição  é  a  mais  indicada  na ausência de dados históricos e para checar a significância estatística.", 12);
                																									  documento.AddSection(validade, "Validade Interna");
										  documento.AddParagraph("A  validade  interna  visa  garantir  que  os  relacionamentos  entre  tratamentos  e  variáveis dependentes tenham um caráter causal, ou seja, garantir que os tratamentos são a causa dos resultados das variáveis dependentes.", 12);
                																documento.AddSection(validade, "Validade de Construção");
																				  documento.AddParagraph("A  validade  de  construção  se  interessa  pela  garantia  da  existência  de  um  correto relacionamento entre a teoria e a observação, através da avaliação dos vários elementos que constituem o projeto do experimento.", 12);
                																				  documento.AddSection(validade, "Validade Externa");
															  documento.AddParagraph("A  validade  externa  preza  pela  habilidade  de  generalizar  o  experimento  para  além  do escopo do mesmo.", 12);
                
				documento.Close();
			}
            catch (DocumentException de)
            {
                
            }
            catch (IOException ioe)
            {
                
            }
            catch (Exception ex)
            {

            }
            finally
            {

				System.Diagnostics.Process.Start(@"Caracterização do uso da ESEML para especificação de projetos de experimentos em engenharia de software .pdf");
            }
        
		}
   }
